package GameFrame

import (
	"github.com/hajimehoshi/ebiten/v2/examples/resources/fonts"
	"golang.org/x/image/font"
	"golang.org/x/image/font/opentype"
	"log"
)

type Mode int

const (
	ModeTitle Mode = iota
	ModeGame
	ModeOver
)

// 为了显示开始界面，涉及到文字的显示，文字显示和字体处理起来都比较麻烦，
// ebitengine内置了一些字体，我们可以据此创建几个字体对象
var (
	titleArcadeFont font.Face
	arcadeFont      font.Face
	smallArcadeFont font.Face
)

func (g *Game) CreateFonts() {
	//opentype.Parse 函数是用来解析一个字体文件，并返回字体对象给tt
	//fonts.PressStart2P_ttf就是ebitengine提供的字体。创建字体的方法一般在需要的时候微调即可。
	tt, err := opentype.Parse(fonts.PressStart2P_ttf)
	if err != nil {
		log.Fatal(err)
	}
	const dpi = 72
	/**
	FaceOptions 结构用于指定字体对象的各种选项，例如提示算法和字体大小。
	最终生成的 *truetype.Face 对象被赋值给 titleArcadeFont 变量，
	可以在游戏中使用它来呈现文本。
	*/
	//Size、DPI、Hinting指字体大小、字体文件的分辨率、提示算法
	titleArcadeFont, err = opentype.NewFace(tt, &opentype.FaceOptions{
		Size:    float64(g.Cfg.TitleFontSize),
		DPI:     dpi,
		Hinting: font.HintingFull,
	})
	if err != nil {
		log.Fatal(err)
	}
	arcadeFont, err = opentype.NewFace(tt, &opentype.FaceOptions{
		Size:    float64(g.Cfg.FontSize),
		DPI:     dpi,
		Hinting: font.HintingFull,
	})
	if err != nil {
		log.Fatal(err)
	}
	smallArcadeFont, err = opentype.NewFace(tt, &opentype.FaceOptions{
		Size:    float64(g.Cfg.SmallFontSize),
		DPI:     dpi,
		Hinting: font.HintingFull,
	})
	if err != nil {
		log.Fatal(err)
	}
}
